/**
 * 
 */
package Proj1;

import java.util.ArrayList;

/**
 *Cursos da Escola 
 * @author Leonardo e Mikaelle
 */
public class Curso {

	private Escola escola;
	/**
	 * Nome do Curso
	 */
	private String nome;
	/**
	 * Lista de Alunos pertencentes ao curso
	 */
	private ArrayList<Aluno> alunos = new ArrayList<Aluno>();
	/**
	 * Lista de professores pertencentes ao curso
	 */
	private ArrayList<Professor> professores = new ArrayList<Professor>();
	/**
	 * Lista de turmas pertencentes ao curso
	 */
	private ArrayList<Turma> turmas = new ArrayList<Turma>();

	/**
	 * Pega turmas do curso
	 * 
	 * @return turmas
	 */
	public ArrayList<Turma> getTurmas() {
		return turmas;
	}

	/**
	 * Pega professores do curso
	 * 
	 * @return professores
	 */
	public ArrayList<Professor> getProfessores() {
		return professores;
	}

	/**
	 * Pega alunos do curso
	 * 
	 * @return alunos
	 */
	public ArrayList<Aluno> getAlunos() {
		return alunos;
	}

	/**
	 * Pega o nome da escola a qual o curso pertence
	 * 
	 * @return escola
	 */
	public Escola getEscola() {
		return escola;
	}

	/**
	 * Altera o nome da escola
	 * 
	 * @param escola
	 *            Objeto escola
	 * @return true
	 */
	public boolean setEscola(Escola escola) {
		if (escola != null) {
			this.escola = escola;
			return true;
		} else
			return false;
	}

	/**
	 * Pega o nome do curso
	 * 
	 * @return nome Nome do curso
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Altera o nome do curso
	 * 
	 * @param nome
	 *            Nome do curso
	 * @return true
	 */
	public boolean setNome(String nome) {
		if (nome != null) {
			this.nome = nome;
			return true;
		} else
			return false;
	}

	/**
	 * Metodo para cadastrar um aluno no curso
	 * 
	 * @param aluno
	 *            Objeto aluno
	 * @return true Se o aluno pertencer a escola ele sera cadastrado com
	 *         sucesso caso contrario retorna false.
	 */
	public boolean cadastAluno(Aluno aluno) {
		if (aluno != null) {
			alunos.add(aluno);
			return true;
		} else
			return false;
	}

	/**
	 * Metodo para cadastrar um professor no curso
	 * 
	 * @param professor
	 *            Objeto professor
	 * @return true Se o professor pertencer a escola ele sera cadastardo com
	 *         sucesso caso contrario retorna false.
	 */
	public boolean cadastProfessor(Professor professor) {
		if (professor != null) {
			professores.add(professor);
			return true;
		} else
			return false;
	}

	/**
	 * Metodo para pesquisar um professor no curso
	 * 
	 * @param professor
	 *            Objeto professor
	 * @return true Se o professor for encontrado retorna true caso contrario
	 *         retorna false.
	 */
	public Professor pesqProf(Professor professor) {
		Professor res = null;
		for (Professor prof : professores) {
			if (prof.getMatricula().equalsIgnoreCase(professor.getMatricula()))
				res = prof;
		}
		return res;
	}
/**
 * Metodo para pesquisar um professor no curso passada sua matricula
 * @param matricula Matricula do professos
 * @return res
 */
	public Professor pesqProf(String matricula) {
		Professor res = null;
		for (Professor prof : professores) {
			if (prof.getMatricula().equalsIgnoreCase(matricula))
				res = prof;
		}
		return res;
	}

	/**
	 * Metodo para pesquisar um aluno no curso
	 * 
	 * @param aluno
	 *            Objeto aluno
	 * @return Se o aluno for encontrado retorna true caso contrario retorna
	 *         false.
	 */
	public Aluno pesqAluno(Aluno aluno) {
		Aluno res = null;
		for (Aluno alu : alunos)
			if (alu.getMatricula().equalsIgnoreCase(aluno.getMatricula()))
				res = alu;
		return res;
	}
/**
 * Metodo para pesquisar um aluno no curso passada sua matricula
 * @param matricula Matricula do aluno
 * @return res
 */
	public Aluno pesqAluno(String matricula) {
		Aluno res = null;
		for (Aluno alu : alunos)
			if (alu.getMatricula().equalsIgnoreCase(matricula))
				res = alu;
		return res;
	}

	/**
	 * Metodo para cadastrar uma turma ao curso
	 * 
	 * @param nome
	 *            Nome da turma
	 * @param professor
	 *            Professor responsavel pela turma
	 * @return true Se a turma for cadastrada com sucesso retorna true caso
	 *         contrario retorna false.
	 */

	public boolean cadastTurma(String nome, Professor professor) {
		boolean achou = false;
		if(professor != null){		
			for (Turma turma : turmas)
				if (turma.getNome().equalsIgnoreCase(nome))
					achou = true;
			if (!achou) {
				Turma turma = new Turma();
				turma.setNome(nome);
				turma.setProfessor(professor);
				turmas.add(turma);
				achou = true;
			}
			return true;
		} else
			return false;
	}

	/**
	 * Metodo para pesquisar uma turma no curso
	 * 
	 * @param turma
	 * @return true Se a turma for encontrada retorna true caso contrario
	 *         retorna false.
	 */
	public Turma pesqTurma(Turma turma) {
		Turma res = null;
		for (Turma tur : turmas)
			if (tur.getNome().equalsIgnoreCase(turma.getNome()))
				res = tur;
		return res;
	}

	/**
	 * Metodo para deletar o professor da turma.
	 * 
	 * @param professor
	 *            Professor responsavel pela turma
	 * @return true Se o professor for encontrado retorna true caso contrario
	 *         retorna false.
	 */
	public boolean delProf(Professor professor) {
		return professores.remove(professor);
	}
/**
 * Metodo para remover um professor do curso passada sua matricula
 * @param matricula Matricula do professor
 * @return true
 */
	public boolean delProf(String matricula) {
		Professor res = null;
		for (Professor prof : professores) {
			if (prof.getMatricula().equalsIgnoreCase(matricula))
				res = prof;
		}
		return professores.remove(res);
	}

	/**
	 * Metodo para deletar alunos da turma passado sua matricula
	 * 
	 * @param matricula
	 *            Matricula do aluno que se deseja remover
	 * @return true Se o aluno for encontrado ele sera removido caso contrario
	 *         retorna false.
	 */
	public boolean delAluno(String matricula) {
		Aluno res = null;
		for (Aluno alu : alunos) {
			if (alu.getMatricula().equalsIgnoreCase(matricula))
				res = alu;
		}
		return alunos.remove(res);
	}

	public boolean delAluno(Aluno aluno) {
		return alunos.remove(aluno);
	}

	/**
	 * Metodo para pesquisar uma turma pelo nome
	 * 
	 * @param nome
	 *            Nome da turma
	 * @return true
	 */
	public Turma pesqTurma(String nome) {
		Turma res = null;
		for (Turma tur : turmas)
			if (tur.getNome().equalsIgnoreCase(nome))
				res = tur;
		return res;
	}

	/**
	 * Metodo para deletar uma turma pelo nome
	 * 
	 * @param nome
	 *            Nome da turma
	 * @return true
	 */
	public boolean delTurma(String nome) {
		Turma res = null;
		for (Turma tur : turmas) {
			if (tur.getNome().equalsIgnoreCase(nome))
				res = tur;
		}
		return turmas.remove(res);
	}

	public boolean delturma(Turma turma) {
		return turmas.remove(turma);
	}

	/**
	 * Construtor explicito do curso
	 * 
	 * @param escola
	 * @param nome
	 */
	public Curso(Escola escola, String nome) {
		super();
		this.escola = escola;
		this.nome = nome;
		this.alunos = new ArrayList<Aluno>();
		this.professores = new ArrayList<Professor>();
		this.turmas = new ArrayList<Turma>();
	}

	/**
	 * Construtor default
	 */
	public Curso() {
		super();
		this.alunos = new ArrayList<Aluno>();
		this.professores = new ArrayList<Professor>();
		this.turmas = new ArrayList<Turma>();
	}
}
